package com.wontube.smr.client;

import java.util.List;

import com.wontube.client.modle.vo.PagenateInfo;
import com.wontube.smr.client.model.po.Genre;
import com.wontube.smr.client.model.po.TVEpisode;
import com.wontube.smr.client.model.po.TVShow;
import com.wontube.smr.client.model.vo.EpisodeItems;
import com.wontube.smr.client.model.vo.TVShowItems;

/**
 * @author tanggf(2012-8-17)
 *
 */
public interface IAnimeHandler {
	/**
	 * all anime genres
	 * 
	 * @return
	 */
	List<Genre> selectAnimeGenres();
	
	/**
	 * @param query
	 * @param pageInfo
	 * @return
	 */
	TVShowItems searchAnimes(String query, PagenateInfo pageInfo);	
	
	/** 
	 * @return
	 */
	TVShowItems selectPopularAnimes(String genreName, PagenateInfo pageInfo);
	
	/**  
	 * @param pageInfo
	 * @return
	 */
	TVShowItems selectRecentAnimes(String genreName, PagenateInfo pageInfo);
	
	/**
	 * @param genreName
	 * @param pageInfo
	 * @return
	 */
	TVShowItems selectTopRatedAnimes(String genreName, PagenateInfo pageInfo);
	
	/**
	 * 同步播放
	 * @return
	 */
	TVShowItems selectSimulcastAnimes(String genreName, PagenateInfo pageInfo);
	
	/**
	 * @param animeId
	 * @return
	 */
	TVShow getAnimes(String animeId);
	
	/**
	 * get all season 
	 * 
	 * @param showId
	 * @return
	 */
	List<Integer> getAllSeasons(String animeId);
	
	/**
	 * get tv episodes
	 * 
	 * @param showId
	 * @return
	 */
	List<TVEpisode> getEpisodeList(String animeId, Integer seasonNum);
	
	
	//=====episode====
	
	/**
	 * get anime episode by id
	 * 
	 * @param episodeId
	 * @return
	 */
	TVEpisode getAnimeEpisode(String episodeId);
	
	/**
	 * 
	 * @param query
	 * @param pageInfo
	 * @return
	 */
	EpisodeItems searchAnimeEpisodes(String query, PagenateInfo pageInfo);	
	
	/**
	 * Most popular episode
	 * @param pageInfo
	 * @return
	 */
	EpisodeItems selectPopularAnimeEpisodes(String genreName, PagenateInfo pageInfo);	
	
	/**
	 * @param genreName
	 * @param pageInfo
	 * @return
	 */
	EpisodeItems selectRecentAnimeEpisodes(String genreName, PagenateInfo pageInfo);
	
	/**
	 * @param genreName
	 * @param pageInfo
	 * @return
	 */
	EpisodeItems selectTopRatedAnimeEpisodes(String genreName, PagenateInfo pageInfo);
}
